package aLeSoftware;

import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.Vector;
import java.util.regex.Pattern;

import javax.swing.*;

import dessin.ModeleDessin;

import bLeMenu.*;
import bLeMenu.Menu;
import aLeSoftware.*;
import modele.FormeGeometrique;

/**
 * Fenetre est une classe héritée de JFrame, c'est la fenetre principale du logiciel, elle contient :<br>
 * <ul>
 * <li>Le menu</li>
 * <li>Un objet JTabbedPane qui accueillera différents Environnement de dessins représentés par la classe EnvironnementDessin,
 * chaque Environnement de dessin est indépendant et est accessible grâce aux onglets</li>
 * </ul>
 * @author amm
 *
 */

	public class Fenetre extends JFrame{
		/**
		 * L'attribut JTabbedPane
		 */
		private JTabbedPane onglets;
		/**
		 * La barre de menu
		 */
		private Menu laBarreMenu;
		
		/**
		 * Constructeur de la classe Fenetre, permet de définir sa taille, son titre, sa position.
		 * De plus il ajoute à la JFrame le menu et la zone d'onglet (JTabbedPane)
		 */
		public Fenetre(){
	         this.setTitle("Editeur");
	         this.setSize(1024, 790);
	         this.setLocationRelativeTo(null);
	         this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	         this.setMinimumSize(new Dimension(500,300));

             Container cp = this.getContentPane();
             cp.setLayout(new BorderLayout());         
             
             //initialisation du menu
             ControleurMenu cmenu = new ControleurMenu(this);
             laBarreMenu = new Menu(cmenu);
             this.setJMenuBar(laBarreMenu);
             //fin initialisation du menu
             
             //initialisation de la zone d'onglets
             this.onglets = new JTabbedPane();
             cp.add(onglets,BorderLayout.CENTER);
             //fin intiialisation zone onglets
             
             this.setVisible(true);
	     }
		
		/**
		 * Getters qui permet de récupérer la zone d'onglets
		 * @return un objet JTabbedPane
		 */
		public JTabbedPane getOnglets() {	return onglets;}
		
		/**
		 * Méthode permettant de créer un nouveau dessin à partir d'une instance d'un environnement de dessin
		 * @param dessinComplet
		 */
		public void nouveauDessin(EnvironnementDessin dessinComplet){
             this.onglets.add("New Picture", dessinComplet);
             this.onglets.setSelectedComponent(dessinComplet);
		}
		
		/**
		 * Méthode qui permet d'ouvrir un dessin à partir d'une chaine de caractère désignant le chemin d'accès au fichier.
		 * 
		 * @param path
		 */
		public void ouvrirDessin(String path){
			try{
			FileInputStream fis = new FileInputStream(path);
			ObjectInputStream ois = new ObjectInputStream(fis);		
			ModeleDessin mdessin=(ModeleDessin)ois.readObject();
			ois.close();
			ModeleGeneral mg = new ModeleGeneral(mdessin);
			EnvironnementDessin envt = new EnvironnementDessin(mg);
			//refresh du path au cas ou le fichier aurait été déplacé depuis le dernier enregistrement
			mdessin.setPath(path);
			this.onglets.add(mdessin.getName(), envt);
			this.onglets.setSelectedComponent(envt);
			}
			catch(Exception e){
				System.out.println("probleme dans ouvrirDessin");
				System.out.println(e.getMessage());
			}
		}
		
		
		public Menu getLaBarreMenu() {
			return laBarreMenu;
		}


		public static void main(String[] args) {
			Fenetre E = new Fenetre();
			
		}
	}


	